#ifndef __FLOAT_H__
#define __FLOAT_H__

#include "trap.h"

typedef int FLOAT;

static inline int F2int(FLOAT a) {
    return a >> 16; // 右移16位得到整数部分
}

static inline FLOAT int2F(int a) {
    return a << 16; // 左移16位得到定点数
}

static inline FLOAT F_mul_int(FLOAT a, int b) {
    return a * b; // 定点数乘整数直接相乘即可
}

static inline FLOAT F_div_int(FLOAT a, int b) {
    return a / b; // 定点数除以整数直接相除即可
}

FLOAT f2F(float); // 将 float 转成 FLOAT
FLOAT F_mul_F(FLOAT, FLOAT); // FLOAT 相乘
FLOAT F_div_F(FLOAT, FLOAT); // FLOAT 相除
FLOAT Fabs(FLOAT); // FLOAT 取绝对值
FLOAT sqrt(FLOAT); // FLOAT 开平方
FLOAT pow(FLOAT, FLOAT); // FLOAT 求幂

// used when calling printf/sprintf to format a FLOAT argument
#define FLOAT_ARG(f) (long long)f

void init_FLOAT_vfprintf(void);

#endif
